package br.ufpa.cbcc2007.dikemon.util;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.TiledLayer;

import br.ufpa.cbcc2007.dikemon.engine.Engine;
import br.ufpa.cbcc2007.dikemon.engine.StringFix;

// Um caixa de texto flutuante.
public class TextBox{
	//Imagem de background
	private Image background;
	//Imagem da fonte
	private Image font;
	// A posição na tela, o número de linhas e de colunas.
	private int x, y, collumns, rows;
	// O background e a camada de texto.
	private TiledLayer backLayer, textLayer;

	//Construtor
	public TextBox(Image background, Image font, int collumns, int rows) {

		this.background = background;
		this.font = font;
		this.collumns = collumns;
		this.rows = rows;
		//Criando as camadas de background e de texto.
		//Lembrando que como o texto usa metade do tamanho de um tile padrão, portanto
		// tem que ter o dobro de linhas e colunas. A subtração destes por é apenas para 
		// evitar que o texto ultrapasse a borda
		backLayer = new TiledLayer(collumns, rows, background, Engine.TILESIZE, Engine.TILESIZE);
		textLayer = new TiledLayer(collumns*2-2, rows*2-2, font, Engine.TILESIZE/2, Engine.TILESIZE/2);
		
		//Aqui é um código meio na força bruta que faz o fundo se "esticar" no espaço devido
		backLayer.fillCells(1, 1, collumns-2, rows-2, 5);
		backLayer.fillCells(1, 0, collumns-2, 1, 2);
		backLayer.fillCells(0, 1, 1, rows-2, 4);
		backLayer.fillCells(1, rows-1, collumns-2, 1, 8); 
		backLayer.fillCells(collumns-1, 1, 1, rows-2, 6);
		backLayer.setCell(0, 0, 1);
		backLayer.setCell(0, rows-1, 7);
		backLayer.setCell(collumns-1, 0, 3);
		backLayer.setCell(collumns-1, rows-1, 9);
		// Posição default
		setPosition(0, 0);
	}



	public void paint(Graphics g) {
		backLayer.paint(g);
		textLayer.paint(g);
	}

	public int getX() {
		return x;
	}

	public int getY() {
		return y;
	}

	public void setPosition(int x, int y) {
		backLayer.setPosition(x, y);
		textLayer.setPosition(x+Engine.TILESIZE/2, y+Engine.TILESIZE/2);
	}

	public int getWidth() {
		return collumns;
	}

	public int getHeigth() {
		return rows;
	}


	public void setText(String text) {
		setText(StringFix.translate(text));
	}

	public void setText(byte[] text) {
		int widthT = textLayer.getColumns();
		int heightT = textLayer.getRows();
		int line=0, collumn=0;
		int length = text.length;
		for (int i = 0; i < length; i++) {
			byte b = text[i];
			textLayer.setCell(collumn++, line, b);
			if(collumn>=widthT){
				collumn = 0;
				line++;
				if(line>=heightT){
					break;
				}
			}
		}
	}

	public Image getBackground() {
		return background;
	}



	public Image getFont() {
		return font;
	}

}
